package com.example.foodsy.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.foodsy.dto.LoginDTO;
import com.example.foodsy.dto.Result;
import com.example.foodsy.entity.CompanyInfo;
import com.example.foodsy.service.CompanyInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.example.foodsy.dto.CLoginDTO;
import com.example.foodsy.service.RetaInfoService;
import com.example.foodsy.utils.Result;
import com.example.foodsy.entity.CompanyInfo;
import com.example.foodsy.service.CompanyInfoService;
import com.example.foodsy.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

/**
 * <p>
 * 节点企业信息表	 前端控制器
 * </p>
 *
 * @author cgc
 * @since 2025-09-23
 */
@RestController
@RequestMapping("/company-info")
@CrossOrigin
public class CompanyInfoController {
	@Autowired
	private CompanyInfoService companyInfoService;
    @Autowired
    private RetaInfoService retaInfoService; // 零售商批号服务


	//企业端登录
	@PostMapping("/login")
	public Result companyLogin(String loginCode, String loginPassword) {
		return companyInfoService.login(loginCode, loginPassword);
	}


    /**
     * 按省份编码统计企业数量（用Result.ok(data)返回单个数值）
     */
    @GetMapping("/countByProvince")
    @PreAuthorize("hasRole('ADMIN')")
    public Result countByProvinceCode(@RequestParam String provId) {
       return companyInfoService.countByProvinceCode(provId);
    }


    /**
     * 新增重点企业（用Result.ok()表示成功，无数据返回）
     */
    @PostMapping("/save")
    @PreAuthorize("hasRole('ADMIN')") // 管理员角色才能访问
    public Result saveModelInfo(@RequestBody CompanyInfo companyInfo) {
        return companyInfoService.saveModelInfo(companyInfo);
    }

    // 2. 查询企业（仅管理员）
    @GetMapping("/{id}")
    @PreAuthorize("hasRole('ADMIN')")
    public Result getById(@PathVariable Integer id) {
        return companyInfoService.getCompanyById(id);
    }
    /**
     * 分页查询重点企业（适配Result.ok(List, total)）
     */
    @GetMapping("/page")
    public Result pageModelInfo(@RequestParam Integer current, @RequestParam Integer size,
                                @RequestParam(required = false) String provId,
                                @RequestParam(required = false) String cityId) {
        return companyInfoService.pageModelInfo(current, size, provId, cityId);
    }

    // 3. 修改企业信息（仅管理员）
    @PutMapping("/update")
    @PreAuthorize("hasRole('ADMIN')")
    public Result update(@RequestBody CompanyInfo companyInfo) {
        return companyInfoService.updateCompany(companyInfo);
    }


    // 4. 删除企业（仅管理员）
    @DeleteMapping("/{id}")
    @PreAuthorize("hasRole('ADMIN')")
    public Result delete(@PathVariable Integer id) {
        return companyInfoService.deleteCompany(id);
    }



    /*
    * 修改密码--仅企业角色
    * */
    @PutMapping("/updatePassword")
    @PreAuthorize("hasRole('COMPANY')") // 企业角色才能访问
    public Result updatePassword(@RequestBody CLoginDTO cloginDTO) {
        return companyInfoService.updatePassword(cloginDTO.getCompanyId(), cloginDTO.getOldPassword(), cloginDTO.getNewPassword());
    }


    /**
     * 零售商确认产品批号（触发溯源码生成）
     * 接口路径：/company/reta/batch/confirm/{rbId}
     * 权限：仅零售商（type=4）可访问
     * @param rbId 零售商批号ID（reta_batch表的主键rb_id）
     * @return 确认结果+生成的溯源码
     */
    @PutMapping("/reta/batch/confirm/{rbId}")
    @PreAuthorize("hasRole('COMPANY')") // 先校验是否为企业角色
    public Result confirmRetaBatch(@PathVariable Integer rbId) {
        // 额外校验：当前登录企业是否为零售商（type=4），防止越权（如批发商调用该接口）
        Integer currentCompanyId = SecurityUtils.getCurrentCompanyId(); // 从JWT解析当前企业ID
        CompanyInfo currentCompany = companyInfoService.getById(currentCompanyId);
        if (currentCompany == null || currentCompany.getType() != 4) { // type=4=零售商
            return Result.fail("无权限操作，仅零售商可确认批号");
        }

        // 调用Service层方法，触发溯源码生成
        return retaInfoService.confirmBatch(rbId);
    }
}
